﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using FrameworkDesign;
namespace CounterApp
{
    public class CounterViewController : MonoBehaviour
    {
        void Start()
        {
            // 注册 Model 的委托
            CounterModel.Instance.Count.OnValueChanged += OnCountChanged;
            OnCountChanged(CounterModel.Instance.Count.Value);// 游戏启动后，要调用一下updateView
            transform.Find("BtnAdd").GetComponent<Button>().onClick.AddListener(() =>
            {
                // 交互逻辑
                // 现在无需手动调用【表现逻辑】
                // 因为，CounterModel.Count++;调用了Set代码，而Set代码通过 C#的委托的方式，触发回调函数OnCountChanged
                // 现在使用命令模式，根本不需要在Controller里面获取CounterModel对象，
                // 直接下达一个命令，也不用去管命令是谁来执行
                new AddCountCommand()
                    .Execute();
            });
            transform.Find("BtnSub").GetComponent<Button>().onClick.AddListener(() =>
            {
                // 交互逻辑
                new SubCountCommand()
                    .Execute();
            });
        }

        private void OnCountChanged(int newCount)
        {
            transform.Find("CountText").GetComponent<Text>().text = newCount.ToString();
        }

        private void OnDestroy()
        {
            // 注销委托
            CounterModel.Instance.Count.OnValueChanged -= OnCountChanged;
        }
    }
    public class CounterModel : Singleton<CounterModel>
    {
        private CounterModel() { } // 因为Singleton的实现缘故，我们必须给CounterModel弄一个非public的构造函数
        public FrameworkDesign.BindableProperty<int> Count = new BindableProperty<int>()
        {
            Value = 0 // 设置默认值
        };
    }
}
